//
//  JXUserAccountViewModel.swift
//  weibo
//
//  Created by admin on 16/5/24.
//  Copyright © 2016年 admin. All rights reserved.
//  用户账户的视图模型
/*
 1. 封装网络请求
 2. 存储用户数据
 3. 对外提供本地缓存的用户数据
 */

import UIKit

let userInfoKey = "userInfoKey"

class JXUserAccountViewModel: NSObject {

	// 定义属性存储用户信息
	var userAccount: JXUserAccount?
	// 定义伪单例对象
	static let shareUserAccount: JXUserAccountViewModel = JXUserAccountViewModel()

	// 重写构造方法
	private override init() {
		super.init()

		userAccount = loadUserAccount()

	}

	// 定义计算性属性,判断是否过期,如果过期,不返回用户的数据,外部可访问取值,判断是否可登录

	var userLogin: Bool {

		if userAccount?.expires_date?.compare(NSDate()) == .OrderedDescending {
            
			return true

		}

        // 如果过期了,不能返回用户信息
        userAccount = nil
        
		return false

	}


	func loadAccessToken(code: String) {

		let urlString = "https://api.weibo.com/oauth2/access_token"

		let parameters = ["client_id": client_id, "client_secret": client_secret, "grant_type": "authorization_code", "code": code, "redirect_uri": redirect_uri]

		HMNetworkTools.sharedTools.request(.POST, urlString: urlString, parameters: parameters) { (responseObject, error) in

			print(responseObject)
			if responseObject == nil {

				// 输出断网信息
//				SVProgressHUD.showErrorWithStatus("娘娘~没网了")

				return
			}

			// 用token请求用户数据

			self.loadUserInfo(responseObject)

		}

	}

	// 获取用户数据

	private func loadUserInfo(responseObject: AnyObject?) {

		guard let result = responseObject as? [String: AnyObject] else {

//			SVProgressHUD.showErrorWithStatus("娘娘~没网了")

			return
		}

		let token = result["access_token"]!
		let uid = result["uid"]!

		let urlString = "https://api.weibo.com/2/users/show.json"
		// 字典中不可以添加nil
		let paramaeters = ["access_token": token, "uid": uid]

		HMNetworkTools.sharedTools.request(.GET, urlString: urlString, parameters: paramaeters) { (responseObject, error) in

			if error != nil {

				// 输出断网信息
//				SVProgressHUD.showErrorWithStatus("娘娘~没网了")

				return
			}

			guard var dict = responseObject as? [String: AnyObject] else {

				return
			}

			// 合并两个字典 result 和 dict
			for (key, value) in result {

				dict[key] = value
			}

			// 如果成功,保存用户信息到本地

			JXUserAccountViewModel().saveUserAccount(dict)
		}

	}

}

extension JXUserAccountViewModel {

//MARK:用户数据保存到本地

	func saveUserAccount(dict: [String: AnyObject]) {

		// 请求下来的数据肯定有空的,所以需要，字典转模型筛选需要的属性

		let userAccount = JXUserAccount.init(dict: dict)

		// 将模型转字典
		let keys = ["access_token", "expires_in", "uid", "name", "avatar_large", "expires_date"]
		let userDict = userAccount.dictionaryWithValuesForKeys(keys)

		// 将字典保存到偏好设置中去，偏好设置中不能保存空数据，但是请求下来的数据肯定有空的
		let userDefaults = NSUserDefaults.standardUserDefaults()

		print(userDict)

		userDefaults.setObject(userDict, forKey: userInfoKey)

		userDefaults.synchronize()

		print(NSHomeDirectory())

	}
//MARK:获取数据

	private func loadUserAccount() -> JXUserAccount? { // 可选项可以返回nil
		// 如果使用as!在偏好设置并没有保存数据的时候 程序会崩溃

		guard let dict = NSUserDefaults.standardUserDefaults().objectForKey(userInfoKey) as?[String: AnyObject] else {

			// 返回空
			return nil
		}

		let user = JXUserAccount(dict: dict)
        
		return user
	}

}

